package com.mmy.service.permissionmenu.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mmy.controller.Common;
import com.mmy.dao.permission.TConstRoleRepository;
import com.mmy.domain.permissionmenu.TConstRole;
import com.mmy.domain.sys.TSysUser;
import com.mmy.service.permissionmenu.PermissionService;

@Service
public class PermissionServiceImpl implements PermissionService {

	@Autowired
	private TConstRoleRepository tConstRoleRepository;

//TODO delete
//	/**
//	 * 函数功能说明： 新建权限角色
//	 *
//	 * @param 参数说明
//	 * @return 返回值说明 ：角色对象
//	 * @throws 异常处理说明
//	 * @author 创建人 shangzl
//	 * @date 创建日期 2020-11-12
//	 */
//	public TConstRole save(TConstRole tConstRole) {
//
//		return tConstRoleRepository.save(tConstRole);
//	}

	/**
	 * 函数功能说明： 通过角色ID查找角色
	 *
	 * @param 参数说明
	 * @return 返回值说明 ：角色对象
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	public TConstRole findByRoleID(int iRoleID) {

		return tConstRoleRepository.findByRoleID(iRoleID);
	}

//TODO delete
//	/**
//	 * 函数功能说明： 通过角色名称分页查找角色
//	 *
//	 * @param 参数说明
//	 * @return 返回值说明 ：角色集合
//	 * @throws 异常处理说明
//	 * @author 创建人 shangzl
//	 * @date 创建日期 2020-11-12
//	 */
//
//	public List<TConstRole> findByRoleName(String strRoleName, int iTempPageNo, int iPageSize) {
//
//		return tConstRoleRepository.findByRoleName(strRoleName, iTempPageNo, iPageSize);
//	}

	/**
	 * 函数功能说明： 通过角色名称查找角色
	 *
	 * @param 参数说明
	 * @return 返回值说明 ：角色集合
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	public int countRoleByRoleName(String strRoleName) {

		return tConstRoleRepository.countRoleByRoleName(strRoleName);
	}

//TODO delete
//	/**
//	 * 函数功能说明： 获取角色最大编码
//	 *
//	 * @param 参数说明
//	 * @return 返回值说明 ：String
//	 * @throws 异常处理说明
//	 * @author 创建人 shangzl
//	 * @date 创建日期 2020-11-12
//	 */
//
//	public String getMaxRoleID() {
//		// 返回计划单最大编码
//		Object objCode = tConstRoleRepository.getMaxRoleID();
//		String strRoleID = "";
//		if (objCode != null) {
//			strRoleID = objCode.toString();
//		}
//		return strRoleID;
//	}

//TODO delete
//	/**
//	 * 函数功能说明： 删除角色
//	 *
//	 * @param 参数说明
//	 * @return 返回值说明 ：无返回值
//	 * @throws 异常处理说明
//	 * @author 创建人 shangzl
//	 * @date 创建日期 2020-11-12
//	 */
//
//	public void delByRoleID(List<Integer> iRoleID) {
//
//		tConstRoleRepository.delByRoleID(iRoleID);
//
//	}

//TODO delete
//	/**
//	 * 函数功能说明： 查找不包含已有id的角色
//	 *
//	 * @param 参数说明
//	 * @return 返回值说明 ：角色集合
//	 * @throws 异常处理说明
//	 * @author 创建人 shangzl
//	 * @date 创建日期 2020-11-12
//	 */
//	public List<TConstRole> findRoleNotInID() {
//
//		return tConstRoleRepository.findRoleNotInID();
//	}

//TODO delete
//	/**
//	 * 函数功能说明： 新增角色ID
//	 *
//	 * @param 参数说明
//	 * @return 返回值说明 ：无返回值
//	 * @throws 异常处理说明
//	 * @author 创建人 shangzl
//	 * @date 创建日期 2020-11-12
//	 */
//	public void save(int roleID) {
//
//		tConstRoleRepository.save(roleID);
//	}

//TODO delete
//	/**
//	 * 函数功能说明： 查找所有角色ID
//	 *
//	 * @param 参数说明
//	 * @return 返回值说明 ：Integer集合
//	 * @throws 异常处理说明
//	 * @author 创建人 shangzl
//	 * @date 创建日期 2020-11-12
//	 */
//	public List<Integer> findRoleID() {
//
//		return tConstRoleRepository.findRoleID();
//	}

	/**
	 * 函数功能说明： 新建角色
	 *
	 * @param 参数说明
	 * @return 返回值说明 ：无返回值
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	public void createPermission(TConstRole tConstRole, TSysUser tSysUser) {
		Object oRoleID = tConstRoleRepository.getMaxRoleID();

//		 判断数据库是否存在角色id 如果存在在最大值基础上加1 如果不存在把最大值置为1 
		if (oRoleID == null) {
			tConstRole.setRoleID(1);
		} else {
			tConstRole.setRoleID((int) oRoleID + 1);
		}

		tConstRole.setCreateDate(new Date());

		tConstRole.setCreator(tSysUser.getUserName());
		tConstRoleRepository.save(tConstRole.getRoleID());
		tConstRoleRepository.save(tConstRole);

	}

	/**
	 * 函数功能说明： 删除角色
	 *
	 * @param 参数说明
	 * @return 返回值说明 ：无返回值
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	public void delPermission(String checkList) {
		String[] arrChecked = checkList.split(",");
		List<Integer> lstRoleID = new ArrayList<>();

		for (String str : arrChecked) {
			lstRoleID.add(Integer.parseInt(str));
		}

		tConstRoleRepository.delByRoleID(lstRoleID);
	}

	/**
	 * 函数功能说明： 修改角色
	 *
	 * @param 参数说明
	 * @return 返回值说明 ：无返回值
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */

	public void updatePermission(TConstRole tConstRole, TSysUser tSysUser) {
//		 定义一个新的实体类对象 
		TConstRole newConstRole = tConstRoleRepository.findByRoleID(tConstRole.getRoleID());
		newConstRole.setRoleName(tConstRole.getRoleName());
		newConstRole.setMemo(tConstRole.getMemo());
		newConstRole.setModifyDate(new Date());

		newConstRole.setReviser(tSysUser.getUserName());

		tConstRoleRepository.save(newConstRole);
	}

//TODO delete
//	/**
//	 * 函数功能说明： 查找角色
//	 *
//	 * @param 参数说明
//	 * @return 返回值说明 ：角色集合
//	 * @throws 异常处理说明
//	 * @author 创建人 shangzl
//	 * @date 创建日期 2020-11-12
//	 */
//	public List<TConstRole> queryPermission(String strRoleName, String pageNumber, String pageSize,
//			HashMap<String, Integer> mapPage) {
//
//		List<TConstRole> lstConstRole = tConstRoleRepository.findByRoleName(strRoleName, mapPage.get("iTempPageNo"),
//				mapPage.get("iPageSize"));
//		return lstConstRole;
//
//	}

	/**
	 * 查询所有
	 *
	 * @author 创建人 hanxl 整理
	 * @date 创建日期 2020.10.29
	 */
	public List<TConstRole> findAll() {

		return tConstRoleRepository.findAll();
	}

	/**
	 * 函数功能说明： 查询角色
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：角色集合
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	public List<TConstRole> toPermission(String pageNumber, String pageSize, String strRoleName) {
		int iPageSize = 0;
		int iTempPageNo = 0;
		if (pageNumber == null) {
			pageNumber = "1";

		}
		if (strRoleName == null) {
			strRoleName = "";
		}
		if (pageSize == null) {
			iPageSize = 20;

		} else {
			iPageSize = Integer.valueOf(pageSize);
			iTempPageNo = (Integer.valueOf(pageNumber) - 1) * iPageSize;
		}

		List<TConstRole> lstConstRole = new ArrayList<TConstRole>();

		lstConstRole = tConstRoleRepository.findByRoleName(strRoleName, iTempPageNo, iPageSize);
		return lstConstRole;

	}

	/**
	 * 函数功能说明：角色分页
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：map
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */

	public HashMap<String, Integer> mapPermission(String pageNumber, String pageSize, String strRoleName) {

		if (strRoleName == null) {
			strRoleName = "";
		}

		Common common = new Common();
		HashMap<String, Integer> mapPage = new HashMap<String, Integer>();

		mapPage = common.getPage(pageNumber, pageSize, tConstRoleRepository.countRoleByRoleName(strRoleName));

		return mapPage;
	}

	/**
	 * 查询总经理角色信息
	 * 
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.03.17
	 */
	public TConstRole getByRoleName() {
		// TODO Auto-generated method stub
		return tConstRoleRepository.getByRoleName();
	}

}
